const [childWidth] = child.get_preferred_width(-1);
const [childHeight] = child.get_preferred_height(-1);
- childBox.set_size(childWidth, childHeight);
- if (childBox.x1 + childWidth > width)
- return;
+ if (childBox.x1 + childWidth <= width)
+ childBox.set_size(childWidth, childHeight);
+ else
+ childBox.set_size(0, 0);
child.allocate(childBox);
let [, , natRealNameWidth] = this._realNameLabel.get_preferred_size();
- if (natRealNameWidth <= availWidth)
+ let childBox = new Clutter.ActorBox();
+
+ let hiddenLabel;
+ if (natRealNameWidth <= availWidth) {
this._currentLabel = this._realNameLabel;
- else
+ hiddenLabel = this._userNameLabel;
+ } else {
this._currentLabel = this._userNameLabel;
+ hiddenLabel = this._realNameLabel;
+ }
this.label_actor = this._currentLabel;
- let childBox = new Clutter.ActorBox();
- childBox.x1 = 0;
- childBox.y1 = 0;
- childBox.x2 = availWidth;
- childBox.y2 = availHeight;
+ hiddenLabel.allocate(childBox);
+
+ childBox.set_size(availWidth, availHeight);
this._currentLabel.allocate(childBox);
}
if (windowInfo.currentTransition) {
windowInfo.currentTransition.get_interval().set_final(childBox);
+
+ // The timeline of the transition might not have been updated
+ // before this allocation cycle, so make sure the child
+ // still updates needs_allocation to FALSE.
+ // Unfortunately, this relies on the fast paths in
+ // clutter_actor_allocate(), otherwise we'd start a new
+ // transition on the child, replacing the current one.
+ child.allocate(child.allocation);
continue;
}
let y = box.y1;
if (this._dropPlaceholderPos == -1) {
+ this._dropPlaceholder.allocate_preferred_size(
+ ...this._dropPlaceholder.get_position());
+
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
this._dropPlaceholder.hide();
});